#include <jni.h>
#include <string>

#define  JAVA_CLASS "org/yxjme/exjni_two/JNIDemo"


//extern "C"
//JNIEXPORT jstring JNICALL
//Java_org_yxjme_exjni_1two_JNIDemo_getStringStr(JNIEnv *env, jobject thiz) {
//    return env -> NewStringUTF("Hello from C++");
//}


jstring GetMessage(JNIEnv *env,jobject obj) {
    return env -> NewStringUTF("Hello from C++");
}


 static JNINativeMethod getMethods[] = {
        {"getStringStr","()Ljava/lang/String;",(void *) GetMessage}
};


/**
 *
 * @param clazz
 * @param methods
 * @param nMethods 方法的数量
 * @return
 */
static int RegisterNativesMethods(JNIEnv * env,
                           const char* name,
                           JNINativeMethod* methods,
                           jint nMethods){
    jclass jcls ;
    jcls = env->FindClass(name);
    if (jcls == nullptr){
        return JNI_FALSE;
    }

    if (env->RegisterNatives(jcls,methods,nMethods) < 0){
        return JNI_FALSE ;
    }
    return JNI_TRUE ;
}




/**
 * 初始化
 *
 * @param vm
 * @param reserved
 * @return
 */
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM * vm , void *reserved){

    JNIEnv *env ;

    if (vm->GetEnv(reinterpret_cast<void **>(env), JNI_VERSION_1_6) != JNI_OK){
        return JNI_FALSE ;
    }

    /**
     * 注册 jni 函数
     */
    RegisterNativesMethods(env, JAVA_CLASS, getMethods,1);
//    LOGI("[JNI_OnLoad] - > %d = ",a);

    /**
     * 返回当前版本
     */
    return JNI_VERSION_1_6;
}
